#include "timer.h"

/** Spusti casovac. Vynuluje vsechny ulozene mezicasy.
 */
void Timer::start() {
	times.clear();
	count = 0;
	p_time = 0;
	t_total = 0;
	s = clock();
}

/** Zacatek pauzy casovace.
 */
void Timer::pause() {
	if (s_pause == 0) s_pause = clock();
}

/** Pokracovani pocitani casovace (navrat z pauzy).
 */
void Timer::resume() {
	if (s_pause != 0) {
		p_time = clock() - s_pause;
		s_pause = 0;
	}
}

/** Vrati dobu od posledniho spusteni casovace.
 * \return celkova doba od posledniho spusteni
 */
double Timer::total() {
	return t_total;
}

/** Ulozi aktualni mezicas do historie.
 * \return doba aktualniho mezicasu
 */
double Timer::lap() {
	double t = current();
	times.push_back(t);
	t_total += t;
	++count;
	s = clock();
	p_time = 0;
	s_pause = 0;
	return t;
}

/** Zastavi casovac.
 * \return doba uplynuta od spusteni
 */
double Timer::stop() {
	double t = current();
	times.push_back(t);
	t_total += t;
	++count;
	s = 0;
	return t;
}

/** Vrati aktualni dobu vypoctu.
 * \return aktualni doba vypoctu
 */
double Timer::current() {
	return double(clock() - s - p_time) / CLOCKS_PER_SEC;
}

/** Vrati vybrany mezicas.
 * \param i index mezicasu, od 0
 * \return i-ty ulozeny mezicas
 */
double Timer::time(int i) {
	if (count > i) return times[i];
	else return 0;
}
